﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLayer.Interfaces;
using BusinessLayer.Implementacion;
using EntityLayer;
using DevExpress.Web.ASPxEditors;
using System.IO;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Diagnostics;
using System.Xml;
using System.Configuration;
using Microsoft.Win32;
using System.Net.Mail;

namespace proyGestionActivos.Gestion
{
    public partial class wfrmBandejaOrdenCompra : System.Web.UI.Page
    {
        IFacadeOrdenCompra BLOrdenCompra;
        IFacadeSolicitarAdquicion BLSolicitarAdquisicion;
        IFacadeGenerarRequerimientoFuncional BLRequerimientoFuncional;
        IFacadeGenerarBaseTecnica BLBaseTecnica;
        
        private static int idGrupo;
        private static int contModificados;
        private static String RutaExcel = "";
        private static String RutaPdfCargado = "";
        protected void Page_Load(object sender, EventArgs e)
        {

            if (Session["SesionUser"] == null)
            {
                Response.Redirect("~/Administracion/Login.aspx");
                return;
            }
            if (!IsPostBack)
            {
                this.validarUserLogin();
                this.validarGrupo();
            }
            this.estadoBotones();
        }

        private void validarUserLogin()
        {//Session["SesionUserGestion"]

            try
            {
                T_Usuario listUser = new T_Usuario();
                listUser = (T_Usuario)Session["SesionUser"];
                BLSolicitarAdquisicion = new FacadeSolicitarAdquicion();
                List<T_Usuario_Sistema> listaUsuario = new List<T_Usuario_Sistema>();
                listaUsuario = BLSolicitarAdquisicion.listarUsuarioxID(listUser.COD_USUARIO_VEH);
                List<T_Area> listaArea = new List<T_Area>();
                if (listaUsuario.Count != 0)
                {
                    listaArea = BLSolicitarAdquisicion.listarAreaxID(listaUsuario[0].CodigoArea);

                    txtUsuario.Text = String.Format("{0} {1}", listaUsuario[0].NombreUsuario, listaUsuario[0].ApellidoUsuario);
                    Session["ID"] = listaUsuario[0].CodigoUsuario;
                    Session["ID_AREA"] = listaUsuario[0].CodigoArea; 
                    txtArea.Text = listaArea[0].NombreArea;
                    txtIDCodigo.Text = listaUsuario[0].CodigoUsuario;
                    txtIDArea.Text = listaUsuario[0].CodigoArea;
                    txtUsuarioOC.Text = listaUsuario[0].CodigoUsuario; ;
                    txtAreaOC.Text = listaUsuario[0].CodigoArea;


                }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }

        }

        private void validarGrupo()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            List<T_Grupo> lista = new List<T_Grupo>();
            T_Usuario listGrupoUser = new T_Usuario();
            listGrupoUser = (T_Usuario)Session["SesionUser"];
            lista = BLOrdenCompra.getGrupo(listGrupoUser.ID_USUARIO);
            try
            {
                if (lista.Count != 0)
                {
                    if (lista[0].ID_GRUPO == 2)
                    {
                        idGrupo = 2;
                    }
                    else if (lista[0].ID_GRUPO == 3)
                    {
                        idGrupo = 3;
                    }
                }

            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }

        private void estadoBotones()
        {
            if (idGrupo == 2)
            {
                for (int i = 0; i < grdOrdenCompra.VisibleRowCount; i++)
                {
                    ASPxButton buttonRF = (ASPxButton)grdOrdenCompra.FindRowCellTemplateControl(i, null, "btnRF");
                    buttonRF.ClientEnabled = true;
                    ASPxButton buttonTB = (ASPxButton)grdOrdenCompra.FindRowCellTemplateControl(i, null, "btnBT");
                    buttonTB.ClientEnabled = false;

                }
            }
            else if (idGrupo == 3)
            {
                for (int i = 0; i < grdOrdenCompra.VisibleRowCount; i++)
                {
                    ASPxButton buttonRF = (ASPxButton)grdOrdenCompra.FindRowCellTemplateControl(i, null, "btnRF");
                    buttonRF.ClientEnabled = false;
                    ASPxButton buttonTB = (ASPxButton)grdOrdenCompra.FindRowCellTemplateControl(i, null, "btnBT");
                    buttonTB.ClientEnabled = true;
                }
            }
        }
        private void cargarGrillaOrdenCompra()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            try
            {
                grdOrdenCompra.DataSource = BLOrdenCompra.listarOrdenCompra();
                grdOrdenCompra.DataBind();
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }
        private void buscarOrdenesCompraPendientes()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            DateTime inicial = Convert.ToDateTime(txtfechaDesde.Date.ToString("yyyy-MM-dd"));
            DateTime fin = Convert.ToDateTime(txtFechaHasta.Date.ToString("yyyy-MM-dd"));
            Session["dateINI"] = inicial;
            Session["dateFIN"] = fin;
            //List<T_Orden_Compra> lista = new List<T_Orden_Compra>();

            try
            {
                //                lista = BLOrdenCompra.ListarOrdenComprasXFechas(inicial,fin);
                //lista = BLOrdenCompra.ListarOrdenComprasXRangoFechas(inicial,fin,false);

                //if (lista.Count == 0)
                //{
                //    lblmenOK.Text = "No se encontró ningún registro.";
                //    popupOK.ShowOnPageLoad = true;
                //}
                //else
                //{
                grdOrdenCompra.DataSource = BLOrdenCompra.ListarOrdenComprasXRangoFechas(inicial, fin, false);
                grdOrdenCompra.DataBind();
                this.estadoBotones();
                //}
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }
        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            this.buscarOrdenesCompraPendientes();
        }

        protected void btnBT_Click(object sender, EventArgs e)
        {
            string idRF = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoRequerimiento"));
            if (idRF == string.Empty || idRF==null)
            {
                lblmenOK.Text = "Para generar la base técnica de la orden de compra, se debe generar antes un requerimiento funcional.";
                popupOK.ShowOnPageLoad = true;
                return;
            }
            else
            {
                this.cargarDatosOrdenCompraBT();
                popupAgregarBT.ShowOnPageLoad = true;
            }
        }

        protected void btnRF_Click(object sender, EventArgs e)
        {
            //string nroOrdenCompra = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "nroOperacion"));
            //Session["OrdenCompra"] = nroOrdenCompra;

            //if (Session["OrdenCompra"]!=null)
            //{
            //    Response.Redirect("wfrmRequerimientoFuncional.aspx");
            //}
            this.cargarDatosOrdenCompraRF();
            popupAgregarRF.ShowOnPageLoad = true;
        }

        protected void linkPrograma_Click(object sender, EventArgs e)
        {
            if (idGrupo==2)
            {
                lblmenOK.Text = "Para actualizar la orden compra, debe iniciar con una cuenta de usuario de Compras.";
                popupOK.ShowOnPageLoad = true;
            }
            else if (idGrupo==3)
            {
             this.cargarDatosOrdenCompraAOrden();
            popupActualizarOrdenCompra.ShowOnPageLoad = true;
            }
           
        }

        protected void btnAceptarBan_Click(object sender, EventArgs e)
        {

        }

        //Metodos de Popup Requerimiento Funcional

        private void cargarDatosRFOrdenCompra(){
            BLRequerimientoFuncional = new FacadeGenerarRequerimientoFuncional();
            List<T_Requerimiento_Funcional> lista = new List<T_Requerimiento_Funcional>();
            
            try
            {
                string CodigoRequerimiento = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoRequerimiento"));
                if (CodigoRequerimiento != string.Empty)
                {
                    lista = BLRequerimientoFuncional.listarRequerimientoxID(CodigoRequerimiento);
                    if (lista.Count!=0)
                    {
                        Session["COD_RF"] = CodigoRequerimiento;
                        txtSistemaOperativo.Text = lista[0].SistemaOperativo;
                        cboLicencia.Value = (string)lista[0].Licencia;
                        cboTipoLicencia.Value = (string)lista[0].TipoLicencia;
                        cboSoporte.Value=(string)lista[0].Soporte;
                    }
                }
                
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }

        private void cargarDatosOrdenCompraRF()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            BLRequerimientoFuncional = new FacadeGenerarRequerimientoFuncional();
            List<ListadoOrdenCompra> listaRF = new List<ListadoOrdenCompra>();

            try
            {
                 string nroOrdenCompra = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "NumeroOrdenCompra"));
            string idRF = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoRequerimiento"));
            if (nroOrdenCompra != null)
            {
                if (idRF == string.Empty)
                {
                    btnModificarRF.ClientEnabled = false;
                    btnGrabarRF.ClientEnabled = true;
                    this.limpiarControlesRF();
                }
                else
                {
                    btnModificarRF.ClientEnabled = true;
                    btnGrabarRF.ClientEnabled = false;
                    this.cargarDatosRFOrdenCompra();
                }
                listaRF = BLOrdenCompra.ListarOrdenComprasCompleto(nroOrdenCompra);

                if (listaRF.Count != 0)
                {
                    txtLicenciaR.Text = listaRF[0].NumeroLicencias.ToString();
                    txtOrdenCompraR.Text = listaRF[0].NumeroOrdenCompra;
                    Session["idOrdenCompra"] = listaRF[0].NumeroOrdenCompra;
                    txtProgramaR.Text = listaRF[0].NombrePrograma;
                    if (idRF == string.Empty)
                    {
                        txtRequerimientoID.Text = BLRequerimientoFuncional.ObtenerNroRequerimientoFuncMax();
                    }
                    else
                    {
                        txtRequerimientoID.Text = listaRF[0].CodigoRequerimiento;
                    }


                }
            }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }

        private void limpiarControlesRF()
        {
            txtSistemaOperativo.Text = string.Empty;
            cboLicencia.SelectedIndex = 0;
            cboSoporte.SelectedIndex = 0;
            cboTipoLicencia.SelectedIndex = 0;
        }

        private bool insertarRequerimientoFuncional()
        {
            bool flag = false;
            string idRF = "";
            BLRequerimientoFuncional = new FacadeGenerarRequerimientoFuncional();
            BLOrdenCompra = new FacadeOrdenCompra();
            try
            {
                T_Requerimiento_Funcional objRF = new T_Requerimiento_Funcional();
                objRF.CodigoRequerimiento = BLRequerimientoFuncional.ObtenerNroRequerimientoFuncMax();
                idRF = objRF.CodigoRequerimiento;
                objRF.SistemaOperativo = txtSistemaOperativo.Text;
                objRF.TipoLicencia = (string)cboTipoLicencia.Value;
                objRF.Soporte = (string)cboSoporte.Value;
                objRF.Licencia = (string)cboLicencia.Value;
                if (BLRequerimientoFuncional.Insertar(objRF))
                {
                    contModificados += 1;
                    Session["IDRequerimiento"] = idRF;
                    this.limpiarControlesRF();
                    flag = true;
                }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }

            return flag;
        }

        private bool modificarRequerimientoFuncional()
        {
            bool flag = false;
            BLRequerimientoFuncional = new FacadeGenerarRequerimientoFuncional();
            BLOrdenCompra = new FacadeOrdenCompra();
            try
            {
                T_Requerimiento_Funcional objRF = new T_Requerimiento_Funcional();
                string idRF = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoRequerimiento"));
                string nroOrdenCompra = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "NumeroOrdenCompra"));
                objRF.CodigoRequerimiento = idRF;
                objRF.SistemaOperativo = txtSistemaOperativo.Text;
                objRF.TipoLicencia = (string)cboTipoLicencia.Value;
                objRF.Soporte = (string)cboSoporte.Value;
                objRF.Licencia = (string)cboLicencia.Value;
                if (BLRequerimientoFuncional.Modificar(objRF))
                {
//                    Session["IDRequerimiento"] = idRF;
                    BLOrdenCompra.actualizarOrdenCompra(idRF,null,nroOrdenCompra);
                    this.limpiarControlesRF();
                    flag = true;
                }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }

            return flag;
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            if (this.insertarRequerimientoFuncional())
            {
                if (BLOrdenCompra.actualizarOrdenCompra((string)Session["IDRequerimiento"], null, (string)Session["idOrdenCompra"]))
                {
                    contModificados += 1;
                    popupAgregarRF.ShowOnPageLoad=false;
                    lblmenOK.Text = "Requerimiento  Funcional registrado correctamente.";
                    popupOK.ShowOnPageLoad = true;
                    this.buscarOrdenesCompraPendientes();
                }


            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //Response.Redirect("../Index.aspx");
            Response.Redirect("~/Administracion/wFrmDefault.aspx?id=rTbdn/32SJs=");
        }

        protected void btnModificarRF_Click(object sender, EventArgs e)
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            if (this.modificarRequerimientoFuncional())
            {
                popupAgregarRF.ShowOnPageLoad = false;
                lblmenOK.Text = "Requerimiento Funcional modificado.";
                popupOK.ShowOnPageLoad = true;
                this.buscarOrdenesCompraPendientes();
            }
        }


        //Metodos de Popup Base Técnica

        private void limpiarControlesTB()
        {
            txtCostoPenBT.Text = string.Empty;
            txtCostoTotalBT.Text = string.Empty;
            txtCostoUniBT.Text = string.Empty;
            cboDuracionBT.SelectedIndex = 0;
            cboPenalidadBT.SelectedIndex = 0;
            cboTipoPagoBT.SelectedIndex = 0;
            
        }
        private void cargarDatosOrdenCompraBT()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            BLBaseTecnica = new FacadeGenerarBaseTecnica();
            List<ListadoOrdenCompra> listaBT = new List<ListadoOrdenCompra>();

            try
            {
                 string nroOrdenCompra = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "NumeroOrdenCompra"));
            string idRF = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoRequerimiento"));
            string idBT = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoBaseTecnica"));
            if (nroOrdenCompra != null)
            {
               

                    if (idBT == string.Empty)
                    {
                        btnModificarBT.ClientEnabled = false;
                        btnGrabarBT.ClientEnabled = true;
                        this.limpiarControlesTB();
                    }
                    else
                    {
                        btnModificarBT.ClientEnabled = true;
                        btnGrabarBT.ClientEnabled = false;
                        this.cargarDatosBTOrdenCompra();
                    }

                    listaBT = BLOrdenCompra.ListarOrdenComprasCompleto(nroOrdenCompra);

                    if (listaBT.Count != 0)
                    {
                        txtNLicenciasBT.Text = listaBT[0].NumeroLicencias.ToString();
                        txtNBT.Text = listaBT[0].NumeroOrdenCompra;
                        Session["idOrdenCompraBT"] = listaBT[0].NumeroOrdenCompra;
                        txtProgramaBT.Text = listaBT[0].NombrePrograma;
                        if (idRF == string.Empty)
                        {
                            txtIdBaseTecBT.Text = BLBaseTecnica.ObtenerNroBaseTecnicaMax();
                        }
                        else
                        {
                            txtIdBaseTecBT.Text = listaBT[0].CodigoBaseTecnica;
                        }


                    }
                }
            
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }

        private bool insertarBaseTecnica()
        {
            BLBaseTecnica = new FacadeGenerarBaseTecnica();
            BLOrdenCompra = new FacadeOrdenCompra();
            bool flag = false;

            string nroOrdenCompra = Session["idOrdenCompraBT"].ToString();
            try
            {
                T_Base_Tecnica objBT = new T_Base_Tecnica();
                objBT.CodigoBaseTecnica = BLBaseTecnica.ObtenerNroBaseTecnicaMax();
                string idBT = objBT.CodigoBaseTecnica;
                objBT.CostoPenalidad = Convert.ToDecimal(txtCostoPenBT.Text);
                objBT.CostoUnitario = Convert.ToDecimal(txtCostoUniBT.Text);
                objBT.DuracionContrato = Convert.ToString(cboDuracionBT.Value);
                objBT.Penalidad = Convert.ToDecimal(cboPenalidadBT.Value);
                objBT.TipoPago = Convert.ToString(cboTipoPagoBT.Value);
                objBT.CostoTotal = Convert.ToDecimal(txtCostoTotalBT.Text);
                if (BLBaseTecnica.Insertar(objBT))
                {
                    BLOrdenCompra.actualizarOrdenCompra(null, idBT, nroOrdenCompra);
                    this.limpiarControlesTB();
                    flag = true;
                }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
            return flag;
        }

        private bool modificarBaseTecnica()
        {
            BLBaseTecnica = new FacadeGenerarBaseTecnica();
            BLOrdenCompra = new FacadeOrdenCompra();
            bool flag = false;
            string idBT = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoBaseTecnica"));
            string nroOrdenCompra = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "NumeroOrdenCompra"));
            try
            {
                T_Base_Tecnica objBT = new T_Base_Tecnica();
                objBT.CodigoBaseTecnica = idBT;
                objBT.CostoPenalidad = Convert.ToDecimal(txtCostoPenBT.Text);
                objBT.CostoUnitario = Convert.ToDecimal(txtCostoUniBT.Text);
                objBT.DuracionContrato = Convert.ToString(cboDuracionBT.Value);
                objBT.Penalidad = Convert.ToDecimal(cboPenalidadBT.Value);
                objBT.TipoPago = Convert.ToString(cboTipoPagoBT.Value);
                objBT.CostoTotal = Convert.ToDecimal(txtCostoTotalBT.Text);
                if (BLBaseTecnica.Modificar(objBT))
                {
                    
                    BLOrdenCompra.actualizarOrdenCompra(nroOrdenCompra, idBT,null );
                    contModificados += 1;
                    contModificados += 1;
                    this.limpiarControlesTB();
                    flag = true;
                }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }

            return flag;
        }

        private void calcularMontoTotal()
        {
            if (txtCostoUniBT.Text!=string.Empty)
            {
                try
                {
                 decimal costoU = Convert.ToDecimal(txtCostoUniBT.Text);
                decimal nLicencia = Convert.ToDecimal(txtNLicenciasBT.Text);
                decimal costoTotal = costoU*nLicencia;

                txtCostoTotalBT.Text = costoTotal.ToString();
                }
                catch (Exception ex)
                {
                    lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                    popupOK.ShowOnPageLoad = true;
                }
          
            }
        }

        private void calcularPenalidad()
        {
            if (txtCostoUniBT.Text != string.Empty)
            {
                try
                {
                decimal costoTotal = Convert.ToDecimal(txtCostoTotalBT.Text);
                decimal porcentaje = Convert.ToDecimal(cboPenalidadBT.Value);
                decimal montoPenalidad = (costoTotal*porcentaje)/100;
                txtCostoPenBT.Text = montoPenalidad.ToString();
                }
                catch (Exception ex)
                {
                    lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                    popupOK.ShowOnPageLoad = true;
                }
               
            }
        }

        private void cargarDatosBTOrdenCompra()
        {
            BLBaseTecnica = new FacadeGenerarBaseTecnica();
            List<T_Base_Tecnica> lista = new List<T_Base_Tecnica>();

            try
            {
                string CodigoBaseTecnica = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoBaseTecnica"));
                if (CodigoBaseTecnica != string.Empty)
                {
                    lista = BLBaseTecnica.listarBaseTecnicaxID(CodigoBaseTecnica);
                    if (lista.Count != 0)
                    {
                        Session["COD_BT"] = CodigoBaseTecnica;
                        txtCostoPenBT.Text = lista[0].CostoPenalidad.ToString();
                        txtCostoUniBT.Text = lista[0].CostoUnitario.ToString();
                        txtCostoTotalBT.Text = lista[0].CostoTotal.ToString();
                        cboDuracionBT.Value = lista[0].DuracionContrato.ToString();
                        cboPenalidadBT.Value = lista[0].Penalidad.ToString();
                        cboTipoPagoBT.Value = lista[0].TipoPago.ToString();
                    }
                }

            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }

        protected void btnGrabarBT_Click(object sender, EventArgs e)
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            if (this.insertarBaseTecnica())
            {
                    popupAgregarBT.ShowOnPageLoad = false;
                    lblmenOK.Text = "Base Técnica registrada correctamente. ";
                    popupOK.ShowOnPageLoad = true;
                    this.buscarOrdenesCompraPendientes();
            }
        }

        protected void btnModificarBT_Click(object sender, EventArgs e)
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            if (this.modificarBaseTecnica())
            {
                popupAgregarBT.ShowOnPageLoad = false;
                lblmenOK.Text = "Base Técnica modificada. ";
                popupOK.ShowOnPageLoad = true;
                this.buscarOrdenesCompraPendientes();
            }
        }

        protected void btnAceptarBan_Click1(object sender, EventArgs e)
        {
            if (contModificados == 0)
            {
                lblmenOK.Text = "No se guardó ninguna información.";
                popupOK.ShowOnPageLoad = true;
            }
            else
            {
                lblmenOK.Text = "Información guardada.";
                popupOK.ShowOnPageLoad = true;
            }
        }

        protected void txtCostoUniBT_TextChanged(object sender, EventArgs e)
        {
            this.calcularMontoTotal();
            this.calcularPenalidad();
        }

        protected void cboPenalidadBT_ValueChanged(object sender, EventArgs e)
        {
            this.calcularPenalidad();
        }

        protected void btnInformeBT_Click(object sender, EventArgs e)
        {
            this.generarInforme();
        }

    //    private void generarInforme()
    //    { 
    //        string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".pdf";
    //            Document document = new Document(PageSize.A4, 50, 50, 25, 25);
    //            PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));
    //        try
    //        {

               
    //            document.Open();


    //            Paragraph parrafo = new Paragraph();

    //            parrafo.Alignment = Element.ALIGN_CENTER;
    //            parrafo.Font = FontFactory.GetFont("Arial", 24);
    //            parrafo.Font.SetStyle(Font.BOLD);
    //            parrafo.Font.SetStyle(Font.UNDERLINE);

    //            parrafo.Add("It's cool man, she's 18");

    //            //Agregar Imagen
    ////            byte[] bytesImagen =
    ////new System.Drawing.ImageConverter().ConvertTo(Recursos.cat, typeof(byte[])) as byte[];
    ////            iTextSharp.text.Image imagen = iTextSharp.text.Image.GetInstance(bytesImagen);
    ////            imagen.Alignment = Element.ALIGN_CENTER;
    ////            document.add(image);


    //            PdfPTable unaTabla = new PdfPTable(2);
    //            unaTabla.SetWidthPercentage(new float[] { 300, 300 }, PageSize.A4);

    //            //Headers
    //            unaTabla.AddCell(new Paragraph("Columna 1"));
    //            unaTabla.AddCell(new Paragraph("Columna 2"));

    //            //¿Le damos un poco de formato?
    //            foreach (PdfPCell celda in unaTabla.Rows[0].GetCells())
    //            {
    //                celda.BackgroundColor = BaseColor.LIGHT_GRAY;
    //                celda.HorizontalAlignment = 1;
    //                celda.Padding = 3;
    //            }

    //            PdfPCell celda1 = new PdfPCell(new Paragraph("Celda 1", FontFactory.GetFont("Arial", 10)));
    //            PdfPCell celda2 = new PdfPCell(new Paragraph("Celda 2", FontFactory.GetFont("Arial", 10)));
    //            PdfPCell celda3 = new PdfPCell(new Paragraph("Celda 3", FontFactory.GetFont("Arial", 10)));
    //            PdfPCell celda4 = new PdfPCell(new Paragraph("Celda 4", FontFactory.GetFont("Arial", 10)));

    //            unaTabla.AddCell(celda1);
    //            unaTabla.AddCell(celda2);
    //            unaTabla.AddCell(celda3);
    //            unaTabla.AddCell(celda4);
    //            document.Add(unaTabla);
    //            document.Close();
           
    //            ////cargar Pdf
    //            //Process prc = new System.Diagnostics.Process();
    //            //prc.StartInfo.FileName = fileName;
    //            //prc.Start();
    //        }
    //        catch (Exception ex)
    //        {
    //            lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
    //            popupOK.ShowOnPageLoad = true;
    //        }
    //    }


        private void generarInforme()
        {
            string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".pdf";
            string idcompra = txtNBT.Text;
            Document document = new Document(PageSize.A4, 50, 50, 25, 25);
            PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));
            try
            {


                document.Open();


                Paragraph parrafo = new Paragraph();

                parrafo.Alignment = Element.ALIGN_CENTER;
                parrafo.Font = FontFactory.GetFont("Arial", 24);
                parrafo.Font.SetStyle(Font.BOLD);
                parrafo.Font.SetStyle(Font.UNDERLINE);

                parrafo.Add("It's cool man, she's 18");

                //Agregar Imagen
                //            byte[] bytesImagen =
                //new System.Drawing.ImageConverter().ConvertTo(Recursos.cat, typeof(byte[])) as byte[];
                //            iTextSharp.text.Image imagen = iTextSharp.text.Image.GetInstance(bytesImagen);
                //            imagen.Alignment = Element.ALIGN_CENTER;
                //            document.add(image);


                PdfPTable unaTabla = new PdfPTable(2);
                unaTabla.SetWidthPercentage(new float[] { 300, 300 }, PageSize.A4);

                //Headers
                unaTabla.AddCell(new Paragraph("Informe Base Técnica"));
                unaTabla.AddCell(new Paragraph("Detalle Informe"));

                //¿Le damos un poco de formato?
                foreach (PdfPCell celda in unaTabla.Rows[0].GetCells())
                {
                    celda.BackgroundColor = BaseColor.LIGHT_GRAY;
                    celda.HorizontalAlignment = 1;
                    celda.Padding = 3;
                }

                PdfPCell celda1 = new PdfPCell(new Paragraph("N° OC", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda2 = new PdfPCell(new Paragraph(txtNBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda3 = new PdfPCell(new Paragraph("N° Base Técnica", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda4 = new PdfPCell(new Paragraph(txtIdBaseTecBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda5 = new PdfPCell(new Paragraph("Programa", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda6 = new PdfPCell(new Paragraph(txtProgramaBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda7 = new PdfPCell(new Paragraph("N° Licencia", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda8 = new PdfPCell(new Paragraph(txtNLicenciasBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda9 = new PdfPCell(new Paragraph("Costo Unitario", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda10 = new PdfPCell(new Paragraph(txtCostoUniBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda11 = new PdfPCell(new Paragraph("Costo Total", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda12 = new PdfPCell(new Paragraph(txtCostoTotalBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda13 = new PdfPCell(new Paragraph("Duración Contrato", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda14 = new PdfPCell(new Paragraph(cboDuracionBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda15 = new PdfPCell(new Paragraph("Tipo pago", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda16 = new PdfPCell(new Paragraph(cboTipoPagoBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda17 = new PdfPCell(new Paragraph("Penalidad % de costo total", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda18 = new PdfPCell(new Paragraph(cboPenalidadBT.Text, FontFactory.GetFont("Arial", 10)));
                PdfPCell celda19 = new PdfPCell(new Paragraph("Costo penalidad", FontFactory.GetFont("Arial", 10)));
                PdfPCell celda20 = new PdfPCell(new Paragraph(txtCostoPenBT.Text, FontFactory.GetFont("Arial", 10)));

                unaTabla.AddCell(celda1);
                unaTabla.AddCell(celda2);
                unaTabla.AddCell(celda3);
                unaTabla.AddCell(celda4);
                unaTabla.AddCell(celda5);
                unaTabla.AddCell(celda6);
                unaTabla.AddCell(celda7);
                unaTabla.AddCell(celda8);
                unaTabla.AddCell(celda9);
                unaTabla.AddCell(celda10);
                unaTabla.AddCell(celda11);
                unaTabla.AddCell(celda12);
                unaTabla.AddCell(celda13);
                unaTabla.AddCell(celda14);
                unaTabla.AddCell(celda15);
                unaTabla.AddCell(celda16);
                unaTabla.AddCell(celda17);
                unaTabla.AddCell(celda18);
                unaTabla.AddCell(celda19);
                unaTabla.AddCell(celda20);

                document.Add(unaTabla);
                document.Close();

                ////cargar Pdf
                //Process prc = new System.Diagnostics.Process();
                //prc.StartInfo.FileName = fileName;
                //prc.Start();
                this.saveFile(fileName, idcompra);
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }


        private void saveFile(string path,string idcompra)
        {
            FileInfo vArchivo = new FileInfo(path);
            string rutapdf = Server.MapPath(ConfigurationManager.AppSettings["RutaPDF"] + idcompra + ".pdf");
            try 
	{	        
		
            if (File.Exists(rutapdf))
            {
                File.Delete(rutapdf);
                vArchivo.CopyTo(rutapdf);
                lblmenOK.Text = "Se guardó el documento N° OC. " + idcompra;
                popupOK.ShowOnPageLoad = true;

            }
            else
            {
                vArchivo.CopyTo(rutapdf);
                lblmenOK.Text = "Se guardó el documento N° OC. " +idcompra;
                popupOK.ShowOnPageLoad = true;
            }
	}
	catch (Exception ex)
	{
		  lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
	}
        }

        //Popup Actualizar orden de Compra

        private void cargarDatosOrdenCompraAOrden()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            BLBaseTecnica = new FacadeGenerarBaseTecnica();
            List<ListadoOrdenCompra> listaAOC = new List<ListadoOrdenCompra>();
            List<T_Orden_Compra> listaCompra = new List<T_Orden_Compra>();
            try
            {
                string nroOrdenCompra = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "NumeroOrdenCompra"));
                string idRF = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoRequerimiento"));
                string idBT = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoBaseTecnica"));
                if (nroOrdenCompra != null)
                {
                        btnModificarBT.ClientEnabled = true;
                        btnGrabarBT.ClientEnabled = false;
                        this.cargarDatosBTOrdenCompra();
                    listaAOC = BLOrdenCompra.ListarOrdenComprasCompleto(nroOrdenCompra);

                    if (listaAOC.Count != 0)
                    {

                        txtOrdenCompraOC.Text = listaAOC[0].NumeroOrdenCompra;
                        txtNLicenciasOC.Text = listaAOC[0].NumeroLicencias.ToString();
                        txtProgramaOC.Text = listaAOC[0].NombrePrograma;
                        Session["idOrdenCompraOC"] = listaAOC[0].NumeroOrdenCompra;
                        txtSustentoOC.Text = listaAOC[0].Sustento;
                        txtCuentaOC.Text = listaAOC[0].NumeroCuenta;
                        cborequeridoOC.Date = listaAOC[0].FechaRequerida;
                    }
                }

            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }

        private bool actualizarOrdenCompraCompleto()
        {
            bool flag = false;
            BLOrdenCompra = new FacadeOrdenCompra();
            try
            {
                int numeroLicencias = Convert.ToInt32(txtNLicenciasOC.Text);
                string sustento = txtSustentoOC.Text;
                string numeroCuenta = txtCuentaOC.Text;
                string fecha = cborequeridoOC.Date.ToString("yyyy-MM-dd");
                string nroOrdenCompra = txtOrdenCompraOC.Text;
               // string nroOrdenCompra = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "NumeroOrdenCompra"));

                if (BLOrdenCompra.actualizarOrdenCompraCompleto(numeroLicencias,sustento,numeroCuenta,fecha,nroOrdenCompra))
                {
                   
                    this.buscarOrdenesCompraPendientes();
                    flag = true;
                }

               
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
            return flag;
        }
        protected void btnModificarOC_Click(object sender, EventArgs e)
        {
            if (this.actualizarOrdenCompraCompleto())
            {
                popupActualizarOrdenCompra.ShowOnPageLoad = false;
                lblmenOK.Text = "Informacion modificada.";
                popupOK.ShowOnPageLoad = true;
            }
        }

        protected void btnMailBT_Click(object sender, EventArgs e)
        {
            popupMail.ShowOnPageLoad = true;
        }

        protected void upcVendedorPNImagen_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            if (e.IsValid)
            {


                string filePath = Server.MapPath(ConfigurationManager.AppSettings["CargaPDF"] + e.UploadedFile.FileName);
                e.UploadedFile.SaveAs(filePath);
                RutaExcel = filePath;



            }
        }

        private  void EnviarCorreo(string destinatario,string asunto,string correo,string adjunto,string body)
        {
            try
            {
                MailMessage mail = new MailMessage();
                mail.From = new MailAddress(ConfigurationManager.AppSettings["Userinf"], "IVAN ROSAS");
                mail.To.Add(correo);
                mail.Subject = asunto;
                mail.Body = body;
                //mail.IsBodyHtml = true;
                mail.Attachments.Add(new Attachment(adjunto, System.Net.Mime.MediaTypeNames.Application.Pdf));
                mail.Priority = MailPriority.Normal;

                SmtpClient s = new SmtpClient();
                s.Port = 587;
                s.Host = "smtp.gmail.com";
                s.EnableSsl = true;
                s.UseDefaultCredentials = false;
                s.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["PasswordSMTP"]);

                s.Send(mail);
                popupMail.ShowOnPageLoad = false;
                this.limpiarMail();
                lblmenOK.Text = "Correo enviado.";
                popupOK.ShowOnPageLoad = true;
                
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
           

        }

        private void limpiarMail(){
        txtmail.Text=string.Empty;
            txtAsunto.Text=string.Empty;
            txtContenido.Text=string.Empty;
            
        }
        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            if (RutaExcel != string.Empty || RutaExcel != null)
            {
                this.EnviarCorreo(txtmail.Text, txtAsunto.Text, txtmail.Text, RutaExcel, txtContenido.Text);
                RutaExcel = "";
            }
            else
            {
                lblmenOK.Text = "Subir el archivo pdf";
                popupOK.ShowOnPageLoad = true;
            }
        }

        protected void btnCerrar_Click(object sender, EventArgs e)
        {
            this.limpiarControlesPrograma();
        }
        private void limpiarControlesPrograma()
        {
            txtPrograma.Text = string.Empty;
            txtDescripcion.Text = string.Empty;
            txtFabricante.Text = string.Empty;
        }

        protected void btnPropuestaOC_Click(object sender, EventArgs e)
        {
            //this.cargarComboProveedor();
            this.cargarDatosPropuestaOrdenCompra();
            this.cargarGrillaPropuesta();
            popupPropuesta.ShowOnPageLoad = true;
            if (grdPropuesta.VisibleRowCount==1)
            {
                btnCargarOC.ClientEnabled = false;
            }
        }
        private void cargarComboProveedor()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            try
            {
                cboProProveedor.DataSource = BLOrdenCompra.listaProveedorEstado();
                cboProProveedor.TextField = "RazonSocial";
                cboProProveedor.ValueField = "CodigoProveedor";
                cboProProveedor.DataBind();
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }

        }
        private void cargarDatosPropuestaOrdenCompra()
        {
            BLBaseTecnica = new FacadeGenerarBaseTecnica();
            List<ListadoOrdenCompra> lista = new List<ListadoOrdenCompra>();

            try
            {
                //string CodigoBaseTecnica = Convert.ToString(grdOrdenCompra.GetRowValues(grdOrdenCompra.FocusedRowIndex, "CodigoBaseTecnica"));
                string nroOrdenCompra = txtOrdenCompraOC.Text;
                if (nroOrdenCompra != string.Empty)
                {
                    lista = BLOrdenCompra.ListarOrdenComprasCompleto(nroOrdenCompra);
                    if (lista.Count != 0)
                    {
                    txtProNroCompra.Text=lista[0].NumeroOrdenCompra;
                        txtProNumeroLicencias.Text=lista[0].NumeroLicencias.ToString();
                        txtProPrograma.Text=lista[0].NombrePrograma;
                    }
                }

            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
        }

        protected void btnCargarOC_Click(object sender, EventArgs e)
        {
            if (RutaPdfCargado != string.Empty)
            {
                this.insertarPropuestaOrdenC();
                this.cargarGrillaPropuesta();
            }
            else
            {
                lblmenOK.Text = "Por favor buscar un archivo pdf de propuesta y cargarlo.";
                popupOK.ShowOnPageLoad = true;
            }
        }

        private void cargarGrillaPropuesta()
        {BLOrdenCompra=new FacadeOrdenCompra();

            try
            {
                string ordencompra = txtProNroCompra.Text;
               
                grdPropuesta.DataSource = BLOrdenCompra.listaPropuestaXOrdencompra(ordencompra);
                grdPropuesta.DataBind();

                if (grdPropuesta.VisibleRowCount==0)
                {
                    btnCargarOC.ClientEnabled = true;
                }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;  
            }
        }
        private bool insertarPropuestaOrdenC()
        {
            BLOrdenCompra = new FacadeOrdenCompra();
            bool flag = false;
            string idPropuesta="";
            try
            {
                T_Propuesta obj = new T_Propuesta();
                obj.CodigoPropuesta = BLOrdenCompra.ObtenerPropuestaMax();
                idPropuesta = obj.CodigoPropuesta;
                obj.CodigoProveedor = (string)cboProProveedor.Value;
                obj.Estado=false;
                obj.UbicacionRed = RutaPdfCargado;
                obj.Fecha = System.DateTime.Now;
                if (BLOrdenCompra.insertarPropuesta(obj))
                {
                    BLOrdenCompra.actualizarOrdenCompraPropuesta(idPropuesta,txtProNroCompra.Text);
                    popupPropuesta.ShowOnPageLoad = false;
                    lblmenOK.Text = "Se insertó propuesta a la orden de compra.";
                    popupOK.ShowOnPageLoad = true;
                    flag = true;
                }
            }
            catch (Exception ex)
            {
                lblmenOK.Text = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                popupOK.ShowOnPageLoad = true;
            }
            return flag;
        }

        protected void upcPdfPropuesta_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            if (e.IsValid)
            {


                string filePath = Server.MapPath(ConfigurationManager.AppSettings["CargaPDFPropuesta"] + e.UploadedFile.FileName);
                e.UploadedFile.SaveAs(filePath);
                RutaPdfCargado = filePath;



            }
        }

        protected void btnAceptarPro_Click(object sender, EventArgs e)
        {
            popupPropuesta.ShowOnPageLoad = false;
        }

        protected void popupPropuesta_Load(object sender, EventArgs e)
        {
            this.cargarComboProveedor();
        }
     }
}